
#pragma region CLASS_DESCRIPTION
/*
* =========================================================================================

* AUTHOR:      Physics Core Team (Ron Ram, Matt Hoyes, Randy Prieto, Kris Greene)
* DATE:        01/17/2012
*
* CLASS:       ICollision3D Interface (ICollision3D.h)
*
* DESCRIPTION:
* ---------------------------------------------------------------------------------------
*	This is a Protocol Class
*	All 3D shapes must implement collision behaviours described in this interface
* =========================================================================================
*/
#pragma endregion


#ifndef ICOLLISION3D_H_
#define ICOLLISION3D_H_


#include "IPhysicsObject.h"

namespace Physics
{
	//Forward declaration
	class Box3D;
	class Circle3D;
	
	class ICollision3D : virtual public IPhysicsObject
	{
#pragma region IMPORTANT_NOTE_ABOUT_DESTRUCTOR_in_BASE_Class
		/********************** IMPORTANT **********************/
		//For a C++ pure abstract class or 'C# style Interface class', use either one of the two methods to declare a destructor
		//BUT a destructor is needed in this class!!!

		//Method 1:
		//public: virtual ~ICollision3D() { }

		//Method 2: 
		//protected: ~ICollision3D() { }
#pragma endregion


	public:
		virtual ~ICollision3D() { }									//C001: EMPTY Destructor

		virtual bool collision(const Box3D &box) = 0;				//M001: this.Shape -> Box3D collision check
		virtual bool collision(const Circle3D &circle) = 0;			//M002: this.Shape -> Circle3D collision check
		//virtual bool collision(const Triangle3D &triangle) =0;	//M003: this.Shape -> Triangle3D collision check
		//virtual bool collision(const Capsule3D &capsule) = 0;		//M004: this.Shape -> Capsule3D collision check
		//virtual bool collision(const Convex3D &convex) = 0;		//M005: this.Shape -> Convex3D collision check
	};	
} /* NAMESPACE */

#endif
